package org.nfIt.controller;

import com.github.pagehelper.PageInfo;
import io.swagger.v3.oas.annotations.Parameter;
import org.nfIt.dto.product.ProductDto;
import org.nfIt.entity.product.Product;
import org.nfIt.service.ProductService;
import org.nfIt.vo.common.Result;
import org.nfIt.vo.common.ResultCodeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * ClossName:ProductController
 * Pakage:org.nfIt.controller
 * Description
 *
 * @Author L
 * @Create 2024/8/21 20:33
 * @Version 2023.1.3
 */
@RestController
@RequestMapping(value="/admin/product/product")
public class ProductController {

    @Autowired
    private ProductService productService ;


    /**
     * 条件分页查询
     * @param page 当前页
     * @param limit 每页记录数
     * @param productDto 条件
     */
    @GetMapping(value = "/{page}/{limit}")
    public Result<PageInfo<Product>> findByPage(@PathVariable Integer page, @PathVariable Integer limit, ProductDto productDto) {
        PageInfo<Product> pageInfo = productService.findByPage(page, limit, productDto);
        return Result.build(pageInfo , ResultCodeEnum.SUCCESS) ;
    }

    /**
     * 根据商品id查询商品信息
     */
    @GetMapping("/getById/{id}")
    public Result<Product> getById(@PathVariable Long id) {
        Product product = productService.getById(id);
        return Result.build(product , ResultCodeEnum.SUCCESS) ;
    }


    /**
     * 添加商品
     */
    @PostMapping("/save")
    public Result save(@RequestBody Product product) {
        productService.save(product);
        return Result.build(null , ResultCodeEnum.SUCCESS) ;
    }

    /**
     * 保存修改的数据
     */
    @PutMapping("/updateByid")
    public Result update(@RequestBody Product product) {
        productService.update(product);
        return Result.build(null,ResultCodeEnum.SUCCESS);
    }

    /**
     *删除
     *name = "id": 指定了参数的名称是id。
     *description = "商品id": 提供了参数的描述信息
     *required = true: 表示这个参数是必填的。在调用API时，
     * 如果没有提供这个参数，那么请求可能会失败或者返回错误信息。
     *# @Parameter注解用于描述一个名为id的必填参数，它代表了一个商品的ID，
     * 并且这个信息会被用于API文档的自动生成中，以便API的使用者能够清晰地了解和使用这个接口。
     */
    @DeleteMapping("/deleteById/{id}")
    public Result deleteById(@Parameter(name = "id", description = "商品id", required = true) @PathVariable Long id) {
        productService.deleteById(id);
        return Result.build(null , ResultCodeEnum.SUCCESS) ;
    }

    /**
     * 商品审核
     * @param id 商品id
     * @param auditStatus 审核状态 1 - 通过 , -1 - 不通过
     */
    @GetMapping("/updateAuditStatus/{id}/{auditStatus}")
    public Result updateAuditStatus(@PathVariable Long id, @PathVariable Integer auditStatus) {
        productService.updateAuditStatus(id, auditStatus);
        return Result.build(null , ResultCodeEnum.SUCCESS) ;
    }

    /**
     * 商品上下架
     * @param id 商品id
     * @param status 上下架状态
     */
    @GetMapping("/updateStatus/{id}/{status}")
    public Result updateStatus(@PathVariable Long id, @PathVariable Integer status) {
        productService.updateStatus(id, status);
        return Result.build(null , ResultCodeEnum.SUCCESS) ;
    }


}
